package com.petsdar.service;

import com.petsdar.dao.TaskMapper;
import com.petsdar.pojo.Task;
import com.petsdar.utils.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigInteger;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Created with IntelliJ IDEA
 * User: heroC
 * Date: 2020/7/2
 * Time: 19:13
 * Description:
 * 对月任务相关逻辑处理的接口的实现：
 * 对月任务记录获取逻辑处理;
 * 对月任务添加逻辑处理;
 * 对月任务删除逻辑处理
 * Version: V1.0
 */
@Service
public class TaskServiceImpl implements TaskService {

    /** task相关数据的持久化实例对象 */
    private TaskMapper taskMapper;
    /** task对象 */
    private Task task;

    @Autowired
    public void setTaskMapper(TaskMapper taskMapper) {
        this.taskMapper = taskMapper;
    }

    @Autowired
    public void setTask(Task task) {
        this.task = task;
    }

    /**
     * 调用TaskMapper的getTask方法，实现数据库交互
     * 获取task所有记录，并返回list集合
     * @return
     */
    @Override
    public List<Task> getTask() {
        List<Task> task = taskMapper.getTask();
        return task;
    }

    /**
     * 对参数值进行json解析成对象，如果对象内容不为空，那么初始化task对象，
     * 再调用dao层TaskMapper的addTask方法，对task信息的持久化操作，最后判断
     * 是否持久化成功，返回boolean值。
     * true为持久化成功，false为持久化失败。
     * @param taskJson json数据
     * @return
     */
    @Override
    public boolean addTask(String taskJson) {
        Map<String,String> map = JsonUtil.toObject(taskJson, Map.class, this.getClass());
        if (map.get("task")!=null){
            task.setTask(map.get("task"));
            task.setTaskId(new BigInteger(String.valueOf(System.currentTimeMillis())));
            task.setTkCreateTime(new Date());
            int result = taskMapper.addTask(task);
            if (result == 1){
                return true;
            }
        }
        return false;
    }

    /**
     * 调用dao层TaskMapper的delTask方法，根据id
     * 将该数据从数据库中移除。成功返回true，否则返回false
     * @param taskId 月任务的id相关数据
     * @return
     */
    @Override
    public boolean delTask(String taskId) {
        int count = taskMapper.delTask(taskId);
        if (count == 1){
            return true;
        }
        return false;
    }
}
